#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

#define LOG "log.txt"

int main()
{   
    umask(0);
    //int fd = open(LOG,O_WRONLY|O_CREAT|O_TRUNC,0777); //只写+自动创建+覆写 创建的文件权限全开
    //int fd = open(LOG,O_WRONLY|O_CREAT,0777); //只写+自动创建 创建的文件权限全开 - 会从头开始写入不会清空文件内容但会覆盖写入位置的内容
    int fd = open(LOG,O_WRONLY|O_CREAT|O_APPEND,0777); //只写+自动创建+追加写入 创建的文件权限全开
    if(fd == -1)
    {
      perror("open write error!\n");
      exit(-1);
    }
    printf("fd: %d,errno: %d,strerror: %s\n",fd,errno,strerror(errno));

    const char* str = "好好学习Linux系统接口!";
    int i = 1;
    while(i<=5)
    {
        char line[128] = {0}; //类似于缓冲区
        snprintf(line,sizeof(line),"%d:%s\n",i++,str);
        //printf(line);
        ssize_t _sizew = write(fd,line,strlen(line));
        //printf("成功写入%d字节!\n",_sizew);
    }
    close(fd);

    fd = open(LOG,O_RDONLY);
    if(fd != -1)
    {
      char print[1024] = {0};
      ssize_t _sizer = read(fd,print,sizeof(print)-1); //读取最大数组容量减一，留出至少一个\0位置
      printf("读取%d字节!\n",_sizer);
      printf(print);
    }
    close(fd);
    return 0;
}
